Add diary comments feature.
authorGlenn Morris <rgm@gnu.org>
Fri, 6 May 2011 04:28:53 +0000 (21:28 -0700)
committerGlenn Morris <rgm@gnu.org>
Fri, 6 May 2011 04:28:53 +0000 (21:28 -0700)
* lisp/calendar/diary-lib.el (diary-comment-start, diary-comment-end):
New options.
(diary-add-to-list): Strip comments from the displayed string.
(diary-mode): Set comment-start and comment-end.

* doc/emacs/cal-xtra.texi (Fancy Diary Display): Mention diary comments.

* etc/NEWS: Mention this.

doc/emacs/ChangeLog
doc/emacs/cal-xtra.texi
etc/NEWS
lisp/ChangeLog
lisp/calendar/diary-lib.el

index 1d7272255bd78b0c302741dfc1fffff6164d969a..5d1b8cc54a1e62fd0d2e4b6a782e0aba30ec5414 100644 (file)
@@ -1,3 +1,7 @@
+2011-05-06  Glenn Morris  <rgm@gnu.org>
+
+       * cal-xtra.texi (Fancy Diary Display): Mention diary comments.
+
 2011-05-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * misc.texi (Emacs Server): Document `server-eval-at'.
index b936636403a66ae793115031dc6dc5b1aa3f84d7..4a51e9004fc15ce03a11859e99b20d08544d32e2 100644 (file)
@@ -616,6 +616,20 @@ first within each day.  Note how the sort command is placed at the end
 of the hook list, in case earlier members of the list change the order
 of the diary entries, or add items.
 
+@vindex diary-comment-start
+  You can write @samp{comments} in diary entries, by setting the
+variables @code{diary-comment-start} and @code{diary-comment-end} to
+strings that delimit comments.  The fancy display does not print
+comments.  You might want to put meta-data for the use of other packages
+(e.g. the appointment package,
+@iftex
+@pxref{Appointments,,,emacs, the Emacs Manual})
+@end iftex
+@ifnottex
+@pxref{Appointments})
+@end ifnottex
+inside comments.
+
 @vindex diary-include-string
   Your main diary file can include other files.  This permits a group of
 people to share a diary file for events that apply to all of them.
index 5094ecfc4fc365fce61510e50d92eb42f2e78919..61713c71fc8138b2a935815f0aa7cb56e1f1b255 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -447,6 +447,10 @@ You can get a comparable behavior with:
 
 ** Calendar, Diary, and Appt
 
++++
+*** Diary entries can contain non-printing `comments'.
+See the variable `diary-comment-start'.
+
 *** New function `diary-hebrew-birthday'.
 
 ---
index 39c46357af941c7510f70dc3518bab1582361678..2288e3e946ac61c9d9e115f0cfedff78f28ad998 100644 (file)
@@ -1,5 +1,10 @@
 2011-05-06  Glenn Morris  <rgm@gnu.org>
 
+       * calendar/diary-lib.el (diary-comment-start, diary-comment-end):
+       New options.
+       (diary-add-to-list): Strip comments from the displayed string.
+       (diary-mode): Set comment-start and comment-end.
+
        * vc/diff-mode.el (smerge-refine-subst): Declare.
        (diff-refine-hunk): Don't require smerge-mode when compiling.
 
index 43c0682277cd2605616e1b0ca6076301ba0c0ced..951b271b9358a6decc0c61410fd60f1e13dbb13d 100644 (file)
@@ -142,6 +142,25 @@ See the documentation for the function `diary-list-sexp-entries'."
   :type 'string
   :group 'diary)
 
+(defcustom diary-comment-start nil
+  "String marking the start of a comment in the diary, or nil.
+Nil means there are no comments.  The diary does not display
+parts of entries that are inside comments.  You can use comments
+for whatever you like, e.g. for meta-data that packages such as
+`appt.el' can use.
+See also `diary-comment-end'."
+  :version "24.1"
+  :type '(choice (const :tag "No comment" nil) string)
+  :group 'diary)
+
+(defcustom diary-comment-end ""
+  "String marking the end of a comment in the diary.
+The empty string means comments finish at the end of a line.
+See also `diary-comment-start'."
+  :version "24.1"
+  :type 'string
+  :group 'diary)
+
 (defcustom diary-hook nil
   "List of functions called after the display of the diary.
 Used for example by the appointment package - see `appt-activate'."
@@ -610,10 +629,15 @@ If LITERAL is nil, it is taken to be the same as STRING.
 
 The entry is added to the list as (DATE STRING SPECIFIER LOCATOR
 GLOBCOLOR), where LOCATOR has the form (MARKER FILENAME LITERAL),
-FILENAME being the file containing the diary entry."
+FILENAME being the file containing the diary entry.
+
+Modifies STRING using `diary-modify-entry-list-string-function', if non-nil.
+Also removes the region between `diary-comment-start' and
+`diary-comment-end', if the former is non-nil."
   (when (and date string)
     ;; b-f-n is nil if we are visiting an include file in a temp-buffer.
-    (let ((dfile (or (buffer-file-name) diary-file)))
+    (let ((dfile (or (buffer-file-name) diary-file))
+          cstart)
       (if diary-file-name-prefix
           (let ((prefix (funcall diary-file-name-prefix-function dfile)))
             (or (string-equal prefix "")
@@ -621,6 +645,16 @@ FILENAME being the file containing the diary entry."
       (and diary-modify-entry-list-string-function
            (setq string (funcall diary-modify-entry-list-string-function
                                  string)))
+      (when (and diary-comment-start
+                 (string-match (setq cstart (regexp-quote diary-comment-start))
+                               string))
+        ;; Preserve the value with the comments.
+        (or literal (setq literal string))
+        (setq string (replace-regexp-in-string
+                      (format "%s.*%s" cstart
+                              (if (zerop (length diary-comment-end)) "$"
+                                (regexp-quote diary-comment-end)))
+                      "" string)))
       (setq diary-entries-list
             (append diary-entries-list
                     (list (list date string specifier
@@ -2353,6 +2387,8 @@ return a font-lock pattern matching array of MONTHS and marking SYMBOL."
   "Major mode for editing the diary file."
   (set (make-local-variable 'font-lock-defaults)
        '(diary-font-lock-keywords t))
+  (set (make-local-variable 'comment-start) diary-comment-start)
+  (set (make-local-variable 'comment-end) diary-comment-end)
   (add-to-invisibility-spec '(diary . nil))
   (add-hook 'after-save-hook 'diary-redraw-calendar nil t)
   ;; In case the file was modified externally, refresh the calendar